package com.atguigu.tingshu.common.util;

import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBlockingQueue;
import org.redisson.api.RDelayedQueue;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * @author: atguigu
 * @create: 2024-05-27 09:36
 */
@Slf4j
@Component
public class DelayMsgService {


    @Autowired
    private RedissonClient redissonClient;

    /**
     * 发送延迟消息
     *
     * @param queueName 队列名称
     * @param msg       消息内容
     * @param ttl       消息延迟时间
     * @param timeUnit  消息延迟时间单位
     */
    public void sendDelayMsg(String queueName, String msg, Long ttl, TimeUnit timeUnit) {
        //1.创建分布式阻塞队列
        RBlockingQueue<String> blockingQueue = redissonClient.getBlockingQueue(queueName);
        //2.将阻塞队列作为入参创建延迟队列
        RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue(blockingQueue);
        //3.调用延迟队列offer方法发送延迟消息
        delayedQueue.offer(msg, ttl, timeUnit);
        log.info("[service-util]发送延迟消息成功：队列名称：{}，消息：{}，ttl:{}{}", queueName, msg, ttl, timeUnit);
    }
}
